# about_operations.py
import tkinter as tk
from tkinter import ttk
import platform
import sys


def cmd_about(parent):
    """显示软件基本信息"""
    about_window = tk.Toplevel(parent)
    about_window.title("关于软件")
    about_window.resizable(False, False)
    about_window.transient(parent)
    about_window.grab_set()

    # 设置窗口大小和位置（居中）
    window_width = 500
    window_height = 400

    # 获取屏幕尺寸
    screen_width = about_window.winfo_screenwidth()
    screen_height = about_window.winfo_screenheight()

    # 计算居中位置
    x_position = (screen_width - window_width) // 2
    y_position = (screen_height - window_height) // 2

    # 设置窗口位置和大小
    about_window.geometry(f"{window_width}x{window_height}+{x_position}+{y_position}")

    # 创建笔记本控件用于分页显示
    notebook = ttk.Notebook(about_window)
    notebook.pack(fill=tk.BOTH, expand=True, padx=10, pady=10)

    # 基本信息页面
    info_frame = ttk.Frame(notebook)
    notebook.add(info_frame, text="基本信息")

    # 统一使用Text组件显示内容
    info_text = """
版本: v1.0.0
构建日期: 2025年

基于先进的YOLO目标检测算法，提供图形化界面操作，
支持多种模型版本，便于进行目标检测任务。

开发团队: 第三小组
版权所有 © 2025
    """

    # 创建Text组件并设置属性
    info_text_widget = tk.Text(info_frame, wrap=tk.WORD, font=("Arial", 10),
                              width=50, height=10, bd=0, highlightthickness=0)
    info_text_widget.insert(tk.END, info_text)
    info_text_widget.config(state=tk.DISABLED)  # 设置为只读
    info_text_widget.pack(pady=20, padx=20)

    # 系统信息页面
    sys_frame = ttk.Frame(notebook)
    notebook.add(sys_frame, text="系统信息")

    sys_info_text = f"""
操作系统: {platform.system()} {platform.release()}
Python版本: {sys.version.split()[0]}
架构: {platform.architecture()[0]}
处理器: {platform.processor() or "未知"}
    """

    # 创建Text组件并设置属性
    sys_text_widget = tk.Text(sys_frame, wrap=tk.WORD, font=("Arial", 10),
                             width=50, height=8, bd=0, highlightthickness=0)
    sys_text_widget.insert(tk.END, sys_info_text)
    sys_text_widget.config(state=tk.DISABLED)  # 设置为只读
    sys_text_widget.pack(pady=20, padx=20)

    # 许可信息页面
    license_frame = ttk.Frame(notebook)
    notebook.add(license_frame, text="许可信息")

    license_text = """
本软件仅供学习和研究使用。

使用本软件需遵守以下条款:
1. 仅限于学习和研究目的使用
2. 不得用于任何商业用途
3. 不得侵犯他人知识产权
4. 使用过程中产生的风险由用户自行承担

第三方库:
- tkinter: Python标准GUI库
- ultralytics: YOLOv8实现
- opencv-python: 图像处理库
- numpy: 数值计算库
    """

    # 使用Text组件显示许可信息
    license_text_widget = tk.Text(license_frame, wrap=tk.WORD, font=("Arial", 10),
                                 width=50, height=10, bd=0, highlightthickness=0)
    license_text_widget.insert(tk.END, license_text)
    license_text_widget.config(state=tk.DISABLED)  # 设置为只读
    license_text_widget.pack(pady=20, padx=20)

    # 确定按钮
    button_frame = tk.Frame(about_window)
    button_frame.pack(pady=10)

    ok_button = tk.Button(button_frame, text="确定",
                         command=about_window.destroy,
                         width=10)
    ok_button.pack()


def cmd_help(parent):
    """显示帮助文档"""
    help_window = tk.Toplevel(parent)
    help_window.title("帮助文档")
    help_window.resizable(True, True)  # 允许调整大小
    help_window.transient(parent)
    help_window.grab_set()

    # 设置窗口大小和位置（居中）
    window_width = 700
    window_height = 600

    # 获取屏幕尺寸
    screen_width = help_window.winfo_screenwidth()
    screen_height = help_window.winfo_screenheight()

    # 计算居中位置
    x_position = (screen_width - window_width) // 2
    y_position = (screen_height - window_height) // 2

    # 设置窗口位置和大小
    help_window.geometry(f"{window_width}x{window_height}+{x_position}+{y_position}")

    # 创建文本框和滚动条
    text_frame = tk.Frame(help_window)
    text_frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=10)

    scrollbar = tk.Scrollbar(text_frame)
    scrollbar.pack(side=tk.RIGHT, fill=tk.Y)

    help_text = tk.Text(text_frame, wrap=tk.WORD, yscrollcommand=scrollbar.set,
                       font=("Arial", 10))
    help_text.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)

    scrollbar.config(command=help_text.yview)

    # 帮助文档内容
    help_content = """
使用说明
========

1. 文件操作
----------
- 打开图片: 支持jpg、png等常见图片格式
- 打开视频: 支持mp4、avi等视频格式
- 打开摄像头: 实时检测摄像头画面
- 最近文件: 快速访问最近打开的文件
- 保存结果: 保存检测结果到本地
- 批量检测: 对多个文件进行批量处理

2. 模型配置
----------
- 模型版本: 选择YOLOv5/v8/v9等版本
- 模型权重: 加载本地或预训练模型文件
- 模型参数: 调整置信度、IOU等参数
  * 置信度阈值: 过滤低置信度的检测结果(0.1-1.0)
  * IOU阈值: 控制检测框的重叠度阈值(0.1-1.0)
  * 检测设备: 选择CPU或GPU进行推理
  * 输入尺寸: 设置模型输入图像尺寸

3. 数据操作
----------
- 加载data.yaml: 加载YOLO格式的数据集配置文件

4. 训练功能
----------
- 调整参数: 设置训练相关的超参数
- 开始: 启动模型训练
- 暂停: 暂停当前训练过程
- 停止: 停止训练并保存模型

5. 推理功能
----------
- 调整参数: 设置推理时的参数
- 开始: 启动目标检测
- 暂停: 暂停检测过程
- 停止: 停止检测

快捷键
======
- Ctrl+O: 打开图片
- Ctrl+V: 打开视频
- Ctrl+C: 打开摄像头
- Ctrl+Q: 退出程序

常见问题
========
Q: 如何加载自定义模型?
A: 在"模型"菜单中选择"加载模型"，选择.pt或.onnx格式的模型文件。  

Q: 检测结果如何保存?
A: 使用"文件"菜单中的"保存结果"功能。

Q: 支持哪些设备进行推理?
A: 支持CPU和GPU(需要CUDA支持)。

Q: 如何进行模型训练?
A: 在"训练"菜单中调整参数后点击"开始"按钮。

技术支持
========
如遇到问题，请联系开发团队或查阅官方文档。
    """

    help_text.insert(tk.END, help_content)
    help_text.config(state=tk.DISABLED)  # 设置为只读

    # 关闭按钮
    close_button = tk.Button(help_window, text="关闭",
                            command=help_window.destroy,
                            width=10)
    close_button.pack(pady=10)
